package fr.uniscol.dao.mapper;

import fr.uniscol.dao.impl.JDBCUtils;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

import org.springframework.jdbc.core.RowMapper;

import fr.uniscol.model.BaseAnneeScolaire;
import fr.uniscol.model.Calendrier;
import fr.uniscol.model.DefaultUser;
import fr.uniscol.model.EtablissementModel;

public class BaseAnneeScolaireRowMapper implements RowMapper<BaseAnneeScolaire> {

	private EtablissementModel etablissement = null;
    
    private EtablissementRowMapper etablissementRowMapper;
    private UserModelRowMapper utilisateurRowMapper;
	
	public BaseAnneeScolaireRowMapper(){
        etablissementRowMapper = new EtablissementRowMapper(null);
        utilisateurRowMapper = new UserModelRowMapper();
	}
	
	public BaseAnneeScolaireRowMapper(EtablissementModel etablissement) {
        this();
		this.etablissement = etablissement;
	}

	public EtablissementModel getEtablissement() {
		return etablissement;
	}

	public void setEtablissement(EtablissementModel etablissement) {
		this.etablissement = etablissement;
	}

	@Override
	public BaseAnneeScolaire mapRow(ResultSet rs, int line)
	throws SQLException {
		
		BaseAnneeScolaire base = new BaseAnneeScolaire();
		base.setId(rs.getLong("BASEID"));
		
		if(etablissement != null){
			base.setEtablissement(etablissement);
		}else{
			base.setEtablissement(new EtablissementModel(rs.getLong("ETABLISSEMENTID")));
            base.getEtablissement().setUai(JDBCUtils.getStringIfExists(rs, "UAI"));
            base.getEtablissement().setNom(JDBCUtils.getStringIfExists(rs, "NOM"));
		}
		base.setAnnee(rs.getInt("ANNEE"));

        base.setAdministrateur(utilisateurRowMapper.mapRow(rs, line));
        
		base.setCalendrier(new Calendrier());
		base.getCalendrier().setDebut(new GregorianCalendar(Locale.FRANCE));
		base.getCalendrier().getDebut().setTime(new Date(rs.getDate("DEBUT").getTime()));
		
		if(rs.getString("FIN") != null){
			base.getCalendrier().setFin(new GregorianCalendar(Locale.FRANCE));
			base.getCalendrier().getFin().setTime(new Date(rs.getDate("FIN").getTime()));
		}
        
        base.setDateCreation(new Date(rs.getDate("DATE_CREATION").getTime()));
        if(rs.getString("DATE_FERMETURE") != null){
            base.setDateFermeture(new Date(rs.getDate("DATE_FERMETURE").getTime()));
        }
		
		return base;
	}
}
